<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>let 和 const</title>
  </head>
  <body>
    <script>
      // let 命令
      // 1、let 声明的变量只在块级作用域内有效
      // {
      //   let age = 10;
      // }
      // console.log(age); // 报错

      // 2、let 声明的变量，没有变量提升，必须先声明后使用
      // console.log(age); // 报错，因为没有变量提升
      // let age = 10;

      // 3、相同作用域内，不允许重复声明同一变量
      // if (true) {
      //   let age = 10;
      //   let age = 20;
      //   console.log(age); // 报错
      // }

      // const 命令
      // 1、const 声明的变量只在块级作用域内有效
      // {
      //   const address = '湖南益阳';
      // }
      // console.log(address); // 报错

      // 2、声明常量的同时必须初始化
      // const phone
      // console.log(phone);  // 报错

      // 3、const 声明常量后，值不可更改
      // 3.1、如果声明的是值类型，值不可更改
      // const address = '湖南益阳';
      // const address = '湖南长沙';
      // console.log(address); // 报错

      // 3.2、如果声明的是引用类型，其类型不可变，但类型里面的值是可变的
      // const arr = [1, 2];
      // arr.push(3);
      // console.log(arr); // [1, 2, 3]

      // const arr = [1, 2];
      // arr = ['vue', 'react'];
      // console.log(arr); // 报错，改变了数组的指向

      // 4、同一作用域内，不允许重复声明同一变量
      // {
      //   const phone = '18088889999';
      //   const phone = '18099998888';
      //   console.log(phone); // 报错
      // }
    </script>
  </body>
</html>
